iT邦幫忙

2021 iThome 鐵人賽

DAY 18
0
Mobile Development

android studio 30天初學筆記系列 第 18

Android Studio初學筆記-Day18-Intent+Bundle

  • 分享至 

  • xImage
  •  

Intent+Bundle

Intent常用於畫面的跳轉,也就是Activity之間的切換,而在Intent的使用中常伴隨著bundle來輔助傳資料,今天就講解一下他們的合作關係。
首先建立一個新的Activity,我命名為SecondActivity,方法如下
https://ithelp.ithome.com.tw/upload/images/20210908/20139136mOn4gIgPka.png
接者來簡單設計兩個的layout,這裡包含了傳值內容的EditText和負責跳轉Activity的Button。
https://ithelp.ithome.com.tw/upload/images/20210908/201391362h97QadVAs.png
https://ithelp.ithome.com.tw/upload/images/20210908/20139136ynpvXPwhyQ.png
最後來到今天的重頭戲,使用Intent和bundle的時候。

程式碼

public class MainActivity extends AppCompatActivity {
    private EditText et1,et2,et3;
    private Button bt1;
    private String content;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt1 = (Button)findViewById(R.id.bt1);
        et1 = (EditText)findViewById(R.id.et1);
        et2 = (EditText)findViewById(R.id.et2);
        et3 = (EditText)findViewById(R.id.et3);
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(et1.getText().toString().matches("")){ ㄎ
                    Toast.makeText(MainActivity.this,"說點甚麼吧",Toast.LENGTH_SHORT).show();
                }
                else if(et2.getText().toString().matches("")){
                    Toast.makeText(MainActivity.this,"請輸入日期~",Toast.LENGTH_SHORT).show();
                }
                else{
                    Bundle bundle = new Bundle();
                    Intent intent = new Intent();
                    //bundle可以根據要傳送的資料選擇put的型態,括號內分別是(key,value)
                    bundle.putString("content",et1.getText().toString());
                    bundle.putInt("month",Integer.parseInt(et2.getText().toString()));
                    bundle.putInt("date",Integer.parseInt(et3.getText().toString()));
                    //把bundle綁入Intent
                    intent.putExtras(bundle);
                    //設定要跳轉的兩個Activity
                    intent.setClass(MainActivity.this,SecondActivity2.class);
                    //啟動intent,執行畫面跳轉
                    startActivity(intent);
                }
            }
        });
    }
}
  • 配合著註解應該很好理解,不過通常Intent使用bundle時,通常代表資料不只一個,可以看到puExtras()的部分,其實如果只需要傳第一項數據就可以不用bundle單純的使用intent.putExtra(),這就留給各位在日後摸索複習拉~
    而在接受資料的Activity的程式碼則如下
public class SecondActivity2 extends AppCompatActivity {
    private TextView tx1,tx2,tx3;
    private String content,month,date;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second2);

        tx1 = (TextView)findViewById(R.id.tx1);
        tx2 = (TextView)findViewById(R.id.tx2);
        tx3 = (TextView)findViewById(R.id.tx3);
        //取得bundle,慢慢拆解從Intent中找到附加的資料
        Bundle bundle = getIntent().getExtras();
        //拆出bundle的內容,key為content
        content=bundle.getString("content");
        //拆出bundle的內容,key為mounth,並將Int型態轉換為String
        month = String.valueOf(bundle.getInt("month"));
        //拆出bundle的內容,key為date,並將Int型態轉換為String
        date = String.valueOf(bundle.getInt("date"));
        tx1.setText(content);
        tx2.setText(month);
        tx3.setText(date);
    }
}
  • 在Intent和bundle的使用上都算是容易上手,這樣就完成了畫面跳轉和Activity之間傳值。

成果

https://ithelp.ithome.com.tw/upload/images/20210908/20139136rES2nCXuqp.png
https://ithelp.ithome.com.tw/upload/images/20210908/20139136QM2FEYFEVu.png
今天Intent和bundle就講到這了,謝謝大家~/images/emoticon/emoticon41.gif


上一篇
Android Studio初學筆記-Day17-ItemTouchHelper
下一篇
Android Studio初學筆記-Day19-SharedPreferences
系列文
android studio 30天初學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言